/*
 * Selling Partner API for Easy Ship
 *
 * Use the Selling Partner API for Easy Ship to build applications for sellers to manage and ship Amazon Easy Ship orders. With this API, you can get available time slots, schedule and reschedule Easy Ship orders, and print shipping labels, invoices, and warranties. To review the differences in Easy Ship operations by marketplace, refer to [Marketplace support](https://developer-docs.amazon.com/sp-api/docs/easyship-api-v2022-03-23-use-case-guide#marketplace-support).
 *
 * The version of the OpenAPI document: 2022-03-23
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = software.amzn.spapi.Client.OpenAPIDateConverter;

namespace software.amzn.spapi.Model.easyship.v2022_03_23
{
    /// <summary>
    /// The response schema for the bulk scheduling API. It returns by the bulk scheduling API containing an array of the scheduled packtages, an optional list of orders we couldn&#39;t schedule with the reason, and a pre-signed URL for a ZIP file containing the associated shipping labels plus the documents enabled for your marketplace.
    /// </summary>
    [DataContract(Name = "CreateScheduledPackagesResponse")]
    public partial class CreateScheduledPackagesResponse : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateScheduledPackagesResponse" /> class.
        /// </summary>
        /// <param name="scheduledPackages">A list of packages. Refer to the &#x60;Package&#x60; object..</param>
        /// <param name="rejectedOrders">A list of orders we couldn&#39;t scheduled on your behalf. Each element contains the reason and details on the error..</param>
        /// <param name="printableDocumentsUrl">A pre-signed URL for the zip document containing the shipping labels and the documents enabled for your marketplace..</param>
        public CreateScheduledPackagesResponse(List<Package> scheduledPackages = default(List<Package>), List<RejectedOrder> rejectedOrders = default(List<RejectedOrder>), string printableDocumentsUrl = default(string))
        {
            this.ScheduledPackages = scheduledPackages;
            this.RejectedOrders = rejectedOrders;
            this.PrintableDocumentsUrl = printableDocumentsUrl;
        }

        /// <summary>
        /// A list of packages. Refer to the &#x60;Package&#x60; object.
        /// </summary>
        /// <value>A list of packages. Refer to the &#x60;Package&#x60; object.</value>
        [DataMember(Name = "scheduledPackages", EmitDefaultValue = false)]
        public List<Package> ScheduledPackages { get; set; }

        /// <summary>
        /// A list of orders we couldn&#39;t scheduled on your behalf. Each element contains the reason and details on the error.
        /// </summary>
        /// <value>A list of orders we couldn&#39;t scheduled on your behalf. Each element contains the reason and details on the error.</value>
        [DataMember(Name = "rejectedOrders", EmitDefaultValue = false)]
        public List<RejectedOrder> RejectedOrders { get; set; }

        /// <summary>
        /// A pre-signed URL for the zip document containing the shipping labels and the documents enabled for your marketplace.
        /// </summary>
        /// <value>A pre-signed URL for the zip document containing the shipping labels and the documents enabled for your marketplace.</value>
        [DataMember(Name = "printableDocumentsUrl", EmitDefaultValue = false)]
        public string PrintableDocumentsUrl { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class CreateScheduledPackagesResponse {\n");
            sb.Append("  ScheduledPackages: ").Append(ScheduledPackages).Append("\n");
            sb.Append("  RejectedOrders: ").Append(RejectedOrders).Append("\n");
            sb.Append("  PrintableDocumentsUrl: ").Append(PrintableDocumentsUrl).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
